perm filename SC2.F4[COL,LCS] blob
sn#351030 filedate 1978-04-24 generic text, type T, neo UTF8
00100 SUBROUTINE READIT
00200 COMMON /Q/ BNW(100),NWZ /INS/INST(27),BG(60) /TYP/SOS,JOUT,
00300 1 LN,ITYP,TPALN(4),JED /NAMES/NA(100),LETRS(27),JNAM(27)
00400 CC 1 LN,ITYP,TPALN(4),JED /IFI/IFI
00500 CC 7/74 COLGATE COMMON/TYP/ IS FOR COLTTY ROUT.
00600 COMMON/VV/LIMIT, V(1) /A/ ROFF(27),NP(27),PCH(27,32),
00700 1 RDEV(27),IPT(27,31),XT(27),OTH(20,16),SCAL(101)
00800 1 ,P1(27),JFM(4),COPY(30),IFM(80)
00900 1 ,FINM(6),TINST(5),ENFI(5),TEDIT(4),INVIS(27)
01000 DIMENSION IV(1),LIST(78),JNP(80),KNP(15)
01100 C WITH VX,IOUT AT 70 AND IFM AT 80 OK FOR ONLY
01200 C 40 LIT CHARS + 30 PARAMS PER INST.
01300 C 60 BG TIMES AVAILABLE. FOR INSTS AND INSERTS AND EDITS.
01400 COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
01500 1/E/IQ(27),KL,X,ZPAR,KA,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
01600 1 ,INP(144),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
01700 COMMON/B/MOT,PR,T5,NINS,I,TP,RA,KZY,NWX,INONLY,MX,
01800 1 Y,Z,ISLAC,MZ,N,IDALL,JC,JG,RB,IJ,IX,BW,KB,NL,RC,W,
01900 1 ZZ,CHN,YY
02000 1 /D/TF,AMPFAC,OP1,DURX,IXIN,IFLNM
02100 1 /C/LPAR,IPRN,QX,RETRO,INVRT,ICON,LCNT,
02200 1 PARENS,JZ,BY,MLX,IZ,ALL,JD,LEND,QTS,ITMP,
02300 1 LP,ILIT,NLIT,KTMP,IC,RAX,RD,IA
02400 C /C/=26
02500 EQUIVALENCE (VX1,VX(1)),(KNP,JNP,INP1,INP(1)),(IPP,ISCA(2))
02600 1 ,(ISS,ISCA(9)),(ITT,ISCA(11))
02700 1 ,(IE,ISCA(5)),(ID,ISCA(3)),(IF,ISCA(6)),(IAA,ISCA(10))
02800 1 ,(VX2,VX(2)),(VX3,VX(3)),(VX4,VX(4)),(IDOT,IDAT(11))
02900 1 ,(V,IV),(LIST,IFM(3)),(IG,ISCA(8))
03000 DATA TINST /25H(' TYPE INST NAME, ETC'/)/,KSLA/'/'/
03100 1,TEDIT/20H(' RETYPE LINE?'/ )/,IEN/'N'/,ITMPO/'TEMPO'/
03200 C *************** READS INPUT ***********************
03300 KIMIT=LIMIT-100
03400 C FOR WARNING ABOUT BUFFER OVERLOAD (LABEL 1774)
03500 ICHD=0
03600 2308 IF(ITYP)GO TO 2127
03700 23081 TYPE TINST
03800 ACCEPT 77732,JNP
03900 IF(JNP(1).EQ.' ')GO TO 23081
04000 CHECK FOR TAB
04100 77732 FORMAT(80A1)
04200 CC IF(JED)WRITE(21,77732)INP
04300 IF(JED)CALL COLTTY(JNP,21)
04400 JFM(4)='80A1)'
04500 C PUTS ON LPT AND TTY
04600 GO TO 1074
04700 CC 6/74 COLGATE2127 JREAD=1
04800 CC 6/74 COLGATE 4400 READ(1,77732,END=2337)JNP
04900 2127 IF(READER(JNP))CALL RUNIT
05000 C READS A LINE. IF END OF FILE, JUMPS.
05100 CC SEE END OF PG.6 IF(SOS)WRITE(JOUT,87732)INP
05200 CC 7/74 IF(SOS)CALL COLTTY(JNP,JOUT,3)
05300 CC 6/74 COLGATE GO TO(441,442,443,444,445,446)JREAD
05400
05500 441 JFM(4)='80A1)'
05600 CC IF(IFI.GE.0)GO TO 1074
05700 IF(LN.EQ.0)GO TO 1074
05800 REREAD 2114,LN,JNP
05900 C**** READS FILES WITH OR WITHOUT LINE NUMBERS!
06000 CC IF(JNP(1).EQ.' ')GO TO 2308
06100 CHECK FOR TAB ***** DOESN'T DO WITH SOS FILES ******
06200 JFM(1)=' (I,A'
06300 CALL FMT(JFM,JNP,MLX)
06400 REREAD JFM,LN,J,JNP
06500 GO TO 4127
06600 1074 IF(INP1.EQ.IBLA.OR.INP1.EQ.32347529280)GO TO 2308
06700 C ABOVE FOR COMMENTS DOESN'T CATCH THIS WITH SOS FILES⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
06800 C BIG NUM = '<'
06900 IF(INP1.EQ.' ')GO TO 2308
07000 CHECK FOR TAB
07100 JFM(1)=' (A'
07200 CALL FMT(JFM,JNP,MLX)
07300 REREAD JFM,J,JNP
07400 4127 IF(JED)GO TO 41271
07500 IF(K.EQ.'Y')GO TO 41271
07600 C K CHECK IS TO PASS AFTER RETYPING
07700 TYPE TEDIT
07800 ACCEPT 77732,K
07900 IF(K.EQ.'Y')GO TO 23081
08000 IF(K.EQ.IG)JED=-1
08100
08200
08300 41271 IF(J.EQ.IBLA)GO TO 2308
08400 CHECKS FOR SPACE(IBLA)
08500 LLETRS=MLX
08600 C LETRS FOR NAME CHANGE FEATURE AT 104
08700 MLX=1
08800 IZ=0
08900 JA=-1
09000 ISUB=4
09100 CALL CLEAN(INP,LEND)
09200 C CLEANS OUT = AND , AND FINDS LINE LENGTH.
09300 ALL=1.
09400 VX1=0
09500 VX2=0
09600 VX3=0
09700 LK=-1
09800 K=0
09900 OFFSET=0
10000 C** OFFSET IS FOR 'CONTINUATION PARAMETERS' - SO INPUT P'S MATCH INST.
10100 C** CAUTION!!! ANY 'OFFSET' PARAMS THAT ARE REFERRED TO AFTER AN 'END'
10200 C** MUST USE THE PROPER INTERNAL NUMB. OF SCORE, NOT THE INST. PARAM!!!!!
10300 IF(V(I-1).NE.-9900.-BY)GO TO 364
10400 BY=-1.
10500 I=I-1
10600 364 DO 361 JD=1,LEND
10700 N=INP(JD)
10800 IF(N.NE.'R')GO TO 361
10900 C LOOKS FOR 'RESTART'
11000 DO 3611 M=JD,LEND
11100 KL=INP(M)
11200 IF(KL.EQ.IBLA)GO TO 3631
11300 IF(KL.EQ.ISEMI)GO TO 3631
11400 CCZZZ IF(KL.EQ.IBLA.OR.KL.EQ.ISEMI.OR.KL.EQ.KSLA.OR.KL.EQ.',')GO TO 3631
11500 3611 INP(M)=IBLA
11600 C CHANGES 'RESTART' TO BLANKS
11700 3631 DO 363 N=1,NINS
11800 IF(J.NE.INST(N))GO TO 363
11900 IQ(N)=-1
12000 C SETS RESTART FLAG. THIS INST WILL NOW APPEAR WITH NEW NUM.
12100 GO TO 362
12200 363 CONTINUE
12300 361 IF(N.EQ.ISEMI)GO TO 6773
12400 6773 K=K+1
12500 IF(K.GT.NINS)GO TO 36
12600 IF(INST(K).NE.J)GO TO 6773
12700 IF(IQ(K).EQ.-1)GO TO 6773
12800 C FINDS CORRECT INST NUM. PASSES RESTARTED INSTS.
12900 LK=K
13000 GO TO 1773
13100 36 IF(J.EQ.'RUN;')GO TO 197
13200 IF(J.NE.'RUN')GO TO 97
13300 197 CALL RUNIT
13400 97 IF(J.EQ.'INSER')GO TO 397
13500 IF(J.EQ.'PRECE')GO TO 397
13600 IF(J.NE.'EDIT')GO TO 297
13700 397 ISUB=6
13800 297 IF(ISUB.GT.4)GO TO 1773
13900 IF(J.EQ.ITMPO)GO TO 1773
14000 IF(J.EQ.'CONDU')GO TO 1773
14100 IF(J.EQ.'PLAY')GO TO 1773
14200 IF(J.EQ.'SECTI')GO TO 1081
14300 C****************** ABOVE AND BELOW FOR 'SECTIONS'
14400 IF(J.EQ.'END')GO TO 1082
14500 IF(J.EQ.'END S')GO TO 1082
14600 IF(J.EQ.'FINIS')GO TO 1082
14700 362 LK=NINS+1
14800 IF(LK.GT.KZY)CALL ERR(LN)
14900 INST(LK)=J
15000 LETRS(LK)=LLETRS
15100 C SAVE HOW MANY LETTERS IN INST. NAME (FOR 'RUNIT')
15200 IZ=LK
15300 GO TO 1773
15400
15500 C*********** DOWN TO 8001 FOR 'SECTIONS'
15600 1083 V(I)=-99.
15700 KL=1
15800 GO TO 3083
15900 C READS 'PLAY SECT. N1,N2'
16000 1081 V(I)=-199.
16100 KL=4
16200 3083 DO 2081 K=KL,72
16300 C****** OR 80 ↑↑↑↑↑↑↑↑↑ ?????
16400 IF(INP(K).EQ.IBLA)GO TO 2081
16500 IV(I+1)=INP(K)
16600 I=I+2
16700 3081 BY=-1.
16800 GO TO 2308
16900 2081 CONTINUE
17000 C READS SECTION IDENTIFIER, -199. MARKS BEGINNING
17100 C1082 IF(V(I-1).EQ.-9900.-BY)I=I-1
17200 C********* FEB 15,71
17300 1082 V(I)=-299.
17400 I=I+1
17500 GO TO 3081
17600 C MARKS END OF SECTION
17700 C************************
17800
17900 8001 FORMAT(A5,5F)
18000 107 FORMAT(I,A5,5F)
18100 4 IF(LK.LE.NINS)GO TO 8773
18200 IF(ALL.GT.0)GO TO 1004
18300 IF(IDALL.GT.0)GO TO 8773
18400 BG(LK)=VX1
18500 IDALL=LK
18600 GO TO 2004
18700 C 'MOVE' CHANGES IN 'ALINS' CAN'T BE RESET IN INDIV. INSTS.
18800 1004 BG(LK)=VX1
18900 IF(LK.EQ.IZ)VX1=0
19000 C MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0.
19100 C CHECK EFFECT ON 'MOVE'!
19200 C ******** APR.23, 1971 FIXES BG TIMES IN 'MOVE'?????!!!!!!!
19300 2004 NINS=LK
19400 IF(VX3.NE.0)VX2=10000.+VX3
19500 IF(VX2.EQ.0)VX2=-1
19600 DUR(LK)=VX2
19700 GO TO 900
19800 C******** ABOVE FOR REST ONLY ENTRIES. FEB 18,71
19900 8773 IF(VX2.NE.0)VX1=VX1*10000.+VX2
20000 900 IF(VX1.NE.BY)GO TO 497
20100 IF(J.NE.'PLAY')GO TO 5773
20200 C*********** 'PLAY' IS FOR 'SECTIONS'
20300 497 BY=VX1
20400 C BY=CURRENT BG TIME.
20500 V(I)=-9900.-BY
20600 I=I+1
20700 IF(NWZ.NE.0)CALL BGSORT(BY)
20800 5773 IF(J.EQ.ITMPO)GO TO 1106
20900 IF(J.EQ.'CONDU')GO TO 3018
21000 IF(J.EQ.'PLAY')GO TO 1083
21100 C*********** ABOVE FOR 'SECTIONS'
21200
21300
21400 4773 NW=LPAR
21500 CZZZZZZZ MLX=ML
21600 ML=MLX
21700 IF(I.LT.KIMIT)GO TO 774
21800 TYPE 107,I
21900 IF(I.GE.LIMIT)TYPE 1774
22000 1774 FORMAT(/' ******* TOO MUCH INPUT DATA!! USE "MIXSCR" *******'/)
22100 774 ALL=1.
22200 DF=0
22300 ISUB=1
22400 CXXX IF(MLX.LT.LEND)GO TO 17732
22500 CXXX THIS LOST ON );Px . . . ; TAKEN OUT 8/20/76
22600 CXXX GO TO 7773
22700
22800 CZZZZZZZZZZZZZZZZZZZZZZZZ
22900 1299 IF(MLX.LE.LEND)GO TO 1773
23000 CZZZZZZZZZZZZZZZ .LT. ZZZZZZZZZZZZ
23100
23200
23300 7773 IF(READER(JNP))CALL RUNIT
23400 C READS A LINE. IF END OF FILE, JUMPS.
23500 CQQQ IF(INP1.EQ.IBLA)GO TO 7773
23600 IF(INP1.EQ.IBLA.OR.INP1.EQ.32347529280)GO TO 7773
23700 C ABOVE FOR COMMENTS. BIG NUM = '<'
23800 IF(JED)GO TO 77733
23900 TYPE TEDIT
24000 ACCEPT 77732,K
24100 IF(K.NE.'Y')GO TO 442
24200 TYPE TPALN
24300 ACCEPT 77732,JNP
24400 442 IF(K.EQ.IG)JED=-1
24500 C DOESN'T WORK FOR EDITS AND INSERTS YET???
24600
24700
24800 77733 MLX=1
24900 C FOR CONTINUATION LINES.(CAN'T 'CONTINUE' TWICE IN A ROW!!)
25000 C 'LISTS' MUST END WITH ; IN NEW(7/74) VERSION.
25100 CALL CLEAN(INP,LEND)
25200 1773 IF(IPRN.EQ.0)GO TO 17732
25300 L=I-1
25400 IF(QTS.GE.0)GO TO 597
25500 IF(V(I-1).EQ.999.)L=L-1
25600 597 IPRN=IPRN-1
25700 IF(PARENS.EQ.0)GO TO 17733
25800 PARENS=0
25900 LIST(LCNT+2)=L
26000 LCNT=LCNT+3
26100 IF(IPRN.EQ.0)GO TO 17732
26200 IPRN=0
26300 17733 LIST(MOT)=L
26400 MOT=0
26500 C FOR ERROR TRAP
26600
26700 CC17732 JZ=0
26800 17732 N=0
26900 17731 ML=MLX
27000
27100 C BIG LOOP -- TO END OF PAGE 1.
27200 JD=ML
27300 975 N=INP(JD)
27400 IF(N.EQ.IBLA)GO TO 236
27500 CCZZZ IF(N.EQ.IBLA.OR.N.EQ.',')GO TO 236
27600 C ((((())))) MAY 13,71 /Z (D4/E/X 2 3)/ CS/ ETC. CAN USE 26 LABELS.
27700 33611 IF(N.EQ.'(')GO TO 697
27800 IF(N.NE.')')GO TO 2361
27900 697 INP(JD)=IBLA
28000 L=JD-1
28100 5113 IF(INP(L).NE.IBLA)GO TO 2113
28200 L=L-1
28300 GO TO 5113
28400 2113 IF(N.EQ.')')GO TO 3361
28500 IF(PARENS.EQ.0)GO TO 1140
28600 LCNT=LCNT+3
28700 IF(MOT.NE.0)CALL ERR(3)
28800 MOT=LCNT-1
28900 1140 DO 11401 JC=1,LCNT-1,3
29000 IF(INP(L).NE.LIST(JC))GO TO 11401
29100 C FINDS DUPLICATE IDENTIFIER
29200 TYPE 11402,INP(L)
29300 CALL EXIT
29400
29500 11402 FORMAT(' MOTIVIC (',A1,') USED TWICE')
29600 11401 CONTINUE
29700 LIST(LCNT)=INP(L)
29800 PARENS=-1.
29900 INP(L)=IBLA
30000 LIST(LCNT+1)=I
30100 GO TO 236
30200 C ''''''' FOR SINGLE QUOTES
30300 3361 IPRN=IPRN+1
30400 GO TO 236
30500 C JUMPS BACK INTO QUOTE SECTION
30600 CQ IF(PARENS.EQ.0)GO TO 2140
30700 CQ LIST(LCNT+2)=L
30800 CQ LCNT=LCNT+3
30900 CQ PARENS=0
31000 CQ GO TO 33612
31100 CQ2140 LIST(MOT)=L
31200 CQ GO TO 33612
31300 CQC ))))))))))) LAST ) CAN'T APPEAR AT END OF LINE!!
31400 C @@@@@@@@@@@@ /@Z/DS3/ ETC.
31500 2361 IF(N.NE.':')GO TO 2362
31600 ICHD=ICHD+1
31700 N=KSLA
31800 GO TO 336
31900 2362 IF(N.NE.'@')GO TO 5361
32000 DO 113 L=1,LEND
32100 K=JD+L
32200 C K IS USED AT 240!!!
32300 JG=INP(K)
32400 IF(JG.NE.'-')GO TO 6113
32500 RETRO=0
32600 INP(K)=IBLA
32700 GO TO 113
32800 6113 IF(JG.NE.'$')GO TO 7113
32900 C '$' IS FOR INVERSIONS IN 'NOTES'
33000 INVRT=0
33100 GO TO 113
33200 7113 IF(JG.NE.IBLA)GO TO 4113
33300 113 CONTINUE
33400 4113 DO 6361 JMOT=1,LCNT,3
33500 IF(JG.NE.LIST(JMOT))GO TO 6361
33600 VX1=0
33700 DO 40 M=JD+2,LEND
33800 JG=INP(M)
33900 IF(JG.EQ.IBLA)GO TO 40
34000 CCZZZ IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.'*')GO TO 140
34100 IF(JG.EQ.KSLA)GO TO 140
34200 IF(JG.EQ.ISEMI)GO TO 140
34300 ML=M
34400 GO TO 240
34500 40 CONTINUE
34600 240 JC=JA
34700 JA=-1
34800 INP(K)=IBLA
34900 CALL SCANR
35000 JA=JC
35100 140 JC=1
35200 KN=LIST(JMOT+1)
35300 M=LIST(JMOT+2)+1
35400 IF(RETRO)GO TO 640
35500 JC=M-1
35600 M=KN-1
35700 KN=JC
35800 JC=-1
35900 RETRO=-1.
36000 640 IF(INVRT)GO TO 940
36100 840 X=V(KN)
36200 RB=X
36300 X=ABS(X)+VX1
36400 Z=X
36500 IF(RB)Z=-Z
36600 V(I)=Z
36700 CC V(I)=X+VX1
36800 C FINDS CENTER FOR INVERSION (+TRANSP.)
36900 I=I+1
37000 KN=KN+JC
37100 IF(V(KN-JC).NE.85.)GO TO 940
37200 V(I-1)=85.
37300 GO TO 840
37400
37500 940 Z=V(KN)
37600 IF(INVRT.EQ.0)GO TO 440
37700 IF(VX1.EQ.0)GO TO 540
37800 C " @Q N " WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
37900 IF(CODE.EQ.-33.)GO TO 440
38000 V(I)=Z*VX1
38100 GO TO 7361
38200 440 IF(Z.EQ.85.)GO TO 540
38300 Y=0
38400 RB=VX1
38500 IF(Z)RB=-RB
38600 IF(INVRT)GO TO 541
38700 RB=-RB
38800 RC=X
38900 IF(Z)RC=-RC
39000 C THIS STUFF FOR CHORD FEATURE
39100 Y=(RC-Z)*2
39200 541 V(I)=Z+RB+Y
39300 CC IF(INVRT.EQ.0)Y=(X-Z)*2.
39400 CC V(I)=Z+VX1+Y
39500 GO TO 7361
39600 540 V(I)=Z
39700 7361 IF(JC.GT.0)GO TO 543
39800 IF(CODE.NE.-33)GO TO 543
39900 JG=I
40000 IF(V(I).GT.0)GO TO 543
40100 542 Y=V(JG)
40200 V(JG)=V(JG-1)
40300 V(JG-1)=Y
40400 C THIS STUFF FOR CHORD FEATURE
40500 IF(V(JG-2).GT.0)GO TO 543
40600 JG=JG-1
40700 GO TO 542
40800 543 I=I+1
40900 KN=KN+JC
41000 IF(KN.NE.M)GO TO 940
41100
41200 INVRT=-1
41300 RB=V(I-1)
41400 DO 8361 L=JD,LEND
41500 JG=INP(L)
41600 C PUT IN NOV 25, 72
41700 CCZZZ IF(JG.EQ.ISEMI)GO TO 93612
41800 KN=L
41900 INP(L)=IBLA
42000 IF(JG.EQ.KSLA)GO TO 9361
42100 IF(JG.EQ.')')IPRN=IPRN+1
42200 IF(JG.NE.ISEMI)GO TO 8361
42300 IAMP=-1
42400 GO TO 9361
42500 8361 CONTINUE
42600 C ABOVE 4 LINES PUT IN 8/76. REPLACE C*********** ↓↓
42700
42800 9361 MLX=L+1
42900 IF(L.GE.LEND)GO TO 93612
43000 C************9361 MLX=L
43100 C************ IF(L.EQ.LEND)GO TO 93612
43200 C ↑↑↑↑↑↑↑ 6/75
43300 C FIX THIS & =IBLA BY CHNGING DO LOOP TO 'GO TO' AT 6721,2722
43400 IF(IAMP.NE.0)GO TO 797
43500 IF(QTS)GO TO 1773
43600 C GO BACK IF NOT END OF LINE
43700 797 JZ=-1
43800 93612 IF(IAMP.EQ.0)GO TO 93611
43900 C NOV 25, 72
44000 IF(QTS)GO TO 3013
44100 GO TO 2722
44200 C THESE ARE FOR "LIT" ITEMS
44300 C ******* DO NOT USE '@-' OR '@$' WITH 'LIT', RLIST OR RNOT****
44400 C NO $ WITH FUNC. $ WITH NUMS AND RHY CAN GIVE NEG RESULT -- TRY IT!
44500 CCZZZ93611 IF(JG.EQ.ISEMI)GO TO 7773
44600 93611 IF(KN.EQ.LEND)GO TO 7773
44700 JZ=0
44800 IF(IPRN.NE.0)GO TO 1773
44900 C ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑PICKS UP ' @X)/ ' SITUATION. 22/6/73
45000 GO TO 236
45100 C LAST TIME FOR QUOTES
45200
45300 C********↑↑ ↑↑ WAS TO 6017 JUNE 10,71
45400 C JUMPS TO END STRING OF QUOTES
45500 6361 CONTINUE
45600 CALL ERR(LN)
45700 C @@@@@@@@@@@@@@@@@@@@@@@@@@
45800 5361 IF(N.EQ.'$')CALL ERR(LN)
45900 C FOUND $ BUT NO @!
46000 IF(N.NE.ID)GO TO 53611
46100 IF(ISUB.NE.1)GO TO 53611
46200 IF(INP(JD+1).NE.IF)GO TO 236
46300 C JUMP IF NOT DUTY FACTOR
46400 DF=DF-100.
46500 GO TO 43615
46600 53611 IF(N.NE.ISS)GO TO 53612
46700 IF(INP(JD+1).NE.'U')GO TO 53612
46800 DF=DF-200
46900 C FOR SUBROUTINE FLAG. CAN'T CALL SUBR AT SAME TIME AS REP OR X!!!!
47000 GO TO 43615
47100 53612 IF(N.NE.IAA)GO TO 43611
47200 C FINDS 'ALL'.
47300 IF(INP(JD+1).NE.'L')GO TO 236
47400 ALL=-1.
47500 GO TO 43615
47600 C TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.
47700
47800 C QUAD CALL MUST BE IN 1ST OF 5 PARAMS. QUAD MUST BE FOLLOWED
47900 C BY SPC, / OR ;. OTHER CALLS SUCH AS MOVE,NUM ETC. CAN
48000 C APPEAR BEFORE / OR ;, BUT "ALL" MUST! APPEAR
48100 C BEFORE! QUAD (IF USED).
48200 C ADD AN "F" TO QUAD FOR FUNCTIONS, AN "X" FOR X,Y COORDS.
48300 C BASIC QUAD PRODUCES CIRCLES. /DEGS/RADIUS/CENT. X/CENT. Y/
48400 C QUADX -- /X /Y / (5TH PARAM WILL ALWAYS BE WASTED)
48500 43611 IF(N.NE.'Q')GO TO 4361
48600 IF(INP(JD+1).NE.'U')GO TO 4361
48700 QX=-13.
48800 DO 43612 N=JD,LEND
48900 J=INP(N)
49000 IF(J.EQ.IXX)QX=QX-1.
49100 IF(J.EQ.IF)QX=QX-2.
49200 IF(J.EQ.IBLA)GO TO 236
49300 IF(J.EQ.KSLA)GO TO 236
49400 CCZZZ IF(J.EQ.IBLA.OR.J.EQ.KSLA.OR.J.EQ.ISEMI.OR.J.EQ.',')GO TO 236
49500 43612 INP(N)=IBLA
49600 4361 IF(N.NE.'I')GO TO 43613
49700 IF(ISUB.NE.4)GO TO 43613
49800 C -1= 'NM INV' MAKES INST NAME, P1 AND P2 INVISIBLE (REPLACES SEG, ETC.)
49900 C -2= 'NM IE' MAKES 'END' OF PRINTOUT INVIS. ( ;PRINT(P1)--ETC.)
50000 C -3= BOTH BEGINNING AND END ARE INVIS.
50100 C THIS IS SO PARAMS MAY BE EXTENDED TO 58 ON TO A DUMMY INST.
50200 L=-1
50300 N=INP(JD+1)
50400 IF(N.EQ.IE)L=L-1
50500 INVIS(LK)=INVIS(LK)+L
50600 43615 DO 43614 L=JD,LEND
50700 N=INP(L)
50800 CC IF(N.EQ.IBLA.OR.N.EQ.KSLA)GO TO 236
50900 IF(N.EQ.IBLA)GO TO 236
51000 IF(N.EQ.ISEMI)GO TO 236
51100 CCZZZ IF(N.EQ.IBLA.OR.N.EQ.','.OR.N.EQ.ISEMI.OR.N.EQ.KSLA)GO TO 236
51200 43614 INP(L)=IBLA
51300 CC43613 IF(N.NE.KSLA)GO TO 636
51400 43613 IF(N.NE.KSLA)GO TO 1336
51500 CC JZ=-1
51600 IF(JD.GE.LEND-1)JZ=0
51700 C SO IT WILL READ NEXT LINE.
51800 CZZZZZZZZZZZZZZZ INP(JD)=ISEMI
51900 GO TO 336
52000 CCZZZ436 IF(INP(MLX).NE.IBLA)GO TO 336
52100 CCZZZ MLX=MLX+1
52200 CCZZZ GO TO 436
52300 CC636 IF(JD.LT.LEND)GO TO 1336
52400 CC ICON=0
52500 CC GO TO 77731
52600 CC GO TO 7773
52700 C TO CONTINUE ON NEXT LINE.
52800 CCZZZ636 IF(N.NE.ISEMI)GO TO 936
52900 1336 IF(N.NE.ISEMI)GO TO 936
53000 IAMP=-1
53100 CC IF(ISUB.NE.1)IAMP=-1
53200 336 MLX=JD+1
53300 IF(ISUB.GE.104)GO TO 104
53400 IF(ISUB.GT.3)GO TO 1899
53500 GO TO (101,102,103),ISUB
53600 C PAR MOV LIST OTHERS
53700 CCZZZ936 IF(N.NE.IDOT)GO TO 736
53800 936 IF(N.NE.IDOT)GO TO 136
53900 L=INP(JD+1)
54000 DO 836 KL=1,10
54100 836 IF(L.EQ.IDAT(KL))GO TO 236
54200 IF(CODE.EQ.-22..OR.CODE.EQ.-23.)INP(JD)=1
54300 GO TO 236
54400 C CHANGES DOTTED RHYTHMS TO '1'S.
54500 CCZZZ736 IF(N.NE.'*')GO TO 136
54600 CCZZZ IAMP=-1
54700 CCZZZ INP(JD)=IBLA
54800 CCZZZ GO TO 336
54900 136 IF(N.NE.IQT)GO TO 236
55000 DO 1361 K=JD+1,LEND
55100 IF(INP(K).NE.IQT)GO TO 1361
55200 JD=K+1
55300 GO TO 975
55400 C SKIPS MATERIAL IN QUOTES
55500 1361 CONTINUE
55600 CALL ERR(LN)
55700 C OPEN QUOTES
55800 236 JD=JD+1
55900 IF(JD.LE.LEND)GO TO 975
56000 CALL ERR(1)
56100 1899 CALL SCANR
56200 CZZZZZZZ ML=MLX
56300 CZZZZZZZZZZZZZZZZZZZZZZZZZZ
56400 GO TO(1,2,3,4,5,6),ISUB
00100 101 N=INP(ML)
00200 IZ=ML
00300 ML=ML+1
00400 IF(N.EQ.IBLA)GO TO 101
00500 JA=-1
00600 C AT THIS POINT IT LOOKS FOR P=PARM, E=END, D=DUPL, C=CONTINUATION, R=RUN.
00700 IF(N.EQ.IPP)GO TO 1
00800 IF(N.EQ.IE)GO TO 2308
00900 IF(N.EQ.'R')CALL RUNIT
01000 C 'RUN' MAY REPLACE 'END' FOR LAST INST.
01100 IF(N.EQ.ID)GO TO 7720
01200 IF(N.NE.'C')CALL ERR(LN)
01300 C NEXT FOR 'CONTINUATION'. AUTOMATICALLY PUSHES UP PARAM NUMS.
01400 OFFSET=OFFSET+1
01500 LPAR=OLDPAR+OFFSET
01600 TYPE 1201,OFFSET
01700 2201 IF(INP(ML).EQ.IBLA)GO TO 3201
01800 C TO MOVE POINTER AHEAD. MUST HAVE BLANK AFTER 'C' OR 'CO' OR 'CONT', ETC.
01900 ML=ML+1
02000 GO TO 2201
02100 3201 IZ=ML-1
02200 M=0
02300 GO TO 201
02400 1201 FORMAT(' ****PARAMETER OFFSET=',F2.0)
02500
02600 1 CALL SCANR
02700 OLDPAR=VX1
02800 C SAVE PARAM NUM. FOR POSSIBLE 'CONTINUATION'. BEWARE OF >P30!!!!
02900 LPAR=OLDPAR+OFFSET
03000 201 IJ=LPAR
03100 IF(IJ.GT.32)CALL ERR(LN)
03200 CATCHES PARAM. OUT OF RANGE.
03300 IF(QX.GE.0)GO TO 5703
03400 IJ=LPAR+4
03500 C SETS UP PARAM FOR QUAD CALL
03600 V(I)=IJ+LK*10000
03700 V(I+1)=2*ALL
03800 C TEST "ALL" FEATURE HERE!!!!!!!
03900 C X=-13(DEGREES),=-14(X,Y),=-15(CIRCLE FUNCTS),=-16(LINE FUNCTS)
04000 V(I+2)=QX
04100 I=I+3
04200 QX=0.
04300 5703 IAMP=0
04400 IF(IJ.LE.NP(LK))GO TO 897
04500 IF(IJ.LT.31)NP(LK)=IJ
04600 897 IF(LPAR.EQ.32)LPAR=1
04700 V(I)=LPAR+LK*10000
04800 C +1=WDCNT, +2=CODE, +3='NM' CCCCC
04900 IJ=I+1
05000 I=I+4
05100 ITMP=0
05200 CODE=0
05300 NFLG=1
05400 ML=IZ+M
05500 C RE=REP R=RHY L=LIT M=MOVE MX=MOVX N=NOTES NU=NUM
05600 C S--L=SUBL S--N=SUBN T=TAP RT=RTAP RL=RLIST RN=RNOTES
05700 C QU=QUADC QUX=QUADX
05800 5702 ML=ML+1
05900 CC IF(ML.GT.72)GO TO 99
06000 N=INP(ML)
06100 IF(N.EQ.IBLA)GO TO 5702
06200 IF(N.EQ.',')GO TO 5702
06300 NL=INP(ML+1)
06400 JA=-1
06500 ISUB=0
06600 IF(N.EQ.IXX)GO TO 2703
06700 IF(N.EQ.'R')GO TO 6702
06800 IF(N.EQ.IF)GO TO 8702
06900 IF(N.EQ.IPP)GO TO 7006
07000 IF(N.NE.'C')GO TO 4005
07100 IF(NL.EQ.'U')GO TO 7006
07200 C FOR 'CUTOFF'
07300 4005 JA=0
07400 IF(N.EQ.IEN)GO TO 6005
07500 IF(N.EQ.'M')GO TO 703
07600 IF(N.EQ.'L')GO TO 2720
07700 IF(N.EQ.ISS)GO TO 6703
07800 IF(N.EQ.ITT)GO TO 4018
07900 IF(N.EQ.IQT)GO TO 5720
08000 IF(N.EQ.ISEMI)GO TO 2018
08100 C 7/75 IF(N.EQ.IPP)JA=-1
08200 C FOR ;P5 P3;
08300 7006 CALL SCANR
08400 IF(ISUB.EQ.8)GO TO 8
08500 I=I+JJ
08600 V(IJ+1)=NNUM+DF
08700 IF(JJ.EQ.1)GO TO 4006
08800 C IF NNUM IS '-2' THEN NOTES ARE PRINTED
08900 IF(NNUM.NE.-2)GO TO 5006
09000 IX=IJ+3
09100 DO 2006 K=2,JJ,3
09200 2006 CALL RANR(VX,K)
09300 C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
09400 5006 IX=IJ+2
09500 DO 6006 K=1,JJ
09600 6006 V(IX+K)=VX(K)
09700 IF(NL.EQ.'U')GO TO 8006
09800 V(IX+JJ-2)=1.
09900 C ABOVE ENSURES THAT LAST RAND. UNIT REACHES 100% - 5/74 *********
10000 GO TO 3013
10100 4006 IF(JA)VX1=-VX1/100.-9999.
10200 C CHANGES ;P5 P3; TO ;P5 -9999.03; ***** CHECK OUT ON OTHER MACHINES!
10300 CIRC4006 IF(JA)VX1=VX1/100.+9999.
10400 CIRC CHANGES ;P5 P3; TO ;P5 9999.03; ***** CHECK OUT ON OTHER MACHINES!
10500 V(I-1)=VX1
10600 GO TO 3013
10700 8006 V(IJ+1)=-19
10800 C FOR 'CUTOFF N1, N2' -- TO END RAND TIMES TOGETHER.
10900 GO TO 3013
11000 6702 IF(NL.EQ.IE)GO TO 2703
11100 C JUMP IF "REP"
11200 IF(NL.EQ.ITT)GO TO 4018
11300 C JUMP IF "RTAP"
11400 CODE=-22
11500 IF(NL.EQ.'L')CODE=-46.0
11600 C JUMP IF "RLIST" (LIST OF RAND SELECTIONS)
11700 IF(NL.NE.IEN)GO TO 1016
11800 C JUMP IF NOT "RNOTES"
11900 JA=0
12000 C FOR SCANR
12100 CODE=-36.
12200 GO TO 1016
12300 6005 CODE=-33
12400 IF(NL.EQ.'A')GO TO 2721
12500 C NUMS, NOTES, NAMES.
12600 IF(NL.NE.'U')GO TO 1016
12700 CODE=-44.
12800 1610 JA=-1
12900 GO TO 1016
13000 8702 CODE=-35
13100 IF(NL.EQ.'U')GO TO 1016
13200 ML=ML+1
13300 CALL SCANR
13400 7 V(IJ+1)=CODE+DF
13500 V(IJ+2)=1.
13600 IF(VX1.GT.15)CALL ERR(4)
13700 C TRAPS F NUMS >15.
13800 V(I)=VX1+85.
13900 GO TO 7703
14000 C******** MOVE IS NEXT ***********
14100 703 BW=V(IJ-2)
14200 IC=0
14300 CC DO 7031 K=ML+1,72
14400 DO 7031 K=ML+1,LEND
14500 LP=INP(K)
14600 IF(LP.EQ.KSLA)GO TO 8031
14700 CC IF(INP(K).EQ.ISEMI)GO TO 8031
14800 IF(LP.EQ.IPP)IC=1
14900 C 'MOVP' P7 MOVP/10 3,4.9 5,5.9;MOVES FROM RAN SEL. OF P3,P4 TO P5,P5.
15000 7031 IF(LP.EQ.IXX)IC=-1
15100 C IC=-1 IS FOR MOVX, IC=0 FOR MOVE, IC=1 FOR MOVP.
15200 8031 I=I-1
15300 V(I)=0
15400 X=-9900.-BY
15500 IF(BY.EQ.0)X=-9900.-BG(LK)
15600 IF(BW.EQ.X)GO TO 8005
15700 IF(BW.NE.-9900.-BY)GO TO 1102
15800 V(IJ-2)=X
15900 GO TO 8005
16000 1102 V(IJ)=V(IJ-1)
16100 V(IJ-1)=X
16200 IJ=IJ+1
16300 I=I+1
16400 8005 LP=IJ-1
16500 BW=-9900.-X
16600 ISUB=2
16700 IZ=-1
16800 C ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
16900 4703 GO TO 1299
17000 102 IF(IZ.LT.0)GO TO 2102
17100 C SKIPS NEXT FIRST TIME
17200 BW=V(ICT)+BW
17300 V(I)=-9900.-BW
17400 V(I+1)=V(LP)
17500 V(I+2)=(JJ+2)*ALL
17600 V(I+3)=CODE+DF
17700 I=I+4
17800 IZ=1
17900 2102 IF(BW.LT.10000.)CALL BGSORT(BW)
18000 C ROUND-OFF NONSENSE
18100 2 VX3=-9900.
18200 VX2=VX3
18300 CALL SCANR
18400 IF(JJ.GT.0)GO TO 5102
18500 JJ=ILIT
18600 C SLASH WILL REPEAT MOVE INPUT -- 6/74
18700 DO 6102 K=1,JJ
18800 6102 VX(K)=VX(K+20)
18900 GO TO 5005
19000 C::::::::::::::: PUT THIS, AND AT 5505, IN SCOR5 ALSO ::::::::::::::
19100 5102 IF(JJ.EQ.4)CALL ERR(LN)
19200 C ERROR -- 4 ITEMS IN MOVE IMPOSSIBLE
19300 IF(VX3.NE.-9900.)GO TO 3102
19400 IF(VX2.NE.-9900.)GO TO 4102
19500 VX2=VX1
19600 VX1=10000.
19700 4102 VX3=VX2
19800 JJ=3
19900 C 1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
20000 3102 IF(IZ.GE.0)GO TO 3006
20100 V(IJ)=(JJ+2)*ALL
20200 C WORD COUNT
20300 CODE=-55.
20400 IF(JJ.NE.3)CODE=-57.
20500 IF(NFLG)CODE=CODE-1.
20600 IF(IC)CODE=-59.
20700 C CODE=-56 OR -58 FOR NOTES.
20800 V(IJ+1)=CODE+DF
20900 IZ=0
21000 3006 IF(NFLG.EQ.1)GO TO 5005
21100 CALL RANR(VX,2)
21200 IF(JJ.NE.3)CALL RANR(VX,4)
21300 C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
21400 5005 IF(IC.LE.0)GO TO 3003
21500 C NEXT FOR 'MOVP', MOVE FROM PARAM TO PARAM.
21600 DO 1003 K=2,JJ
21700 1003 VX(K)=-VX(K)/100.0-9999.0
21800 CIRC1003 VX(K)=VX(K)/100.0+9999.0
21900 C CHANGES PARAM NUMS TO MAGIC NUMS.
22000 3003 ICT=I
22100 ILIT=JJ
22200 C SAVES FOR SLASH REPEAT FEATURE
22300 IJ=IJ+1
22400 DO 1006 K=1,JJ
22500 VX(20+K)=VX(K)
22600 C SAVES FOR SLASH REPEAT FEATURE
22700 1006 V(IJ+K)=VX(K)
22800 I=I+JJ
22900 IJ=I+2
23000 IF(IAMP.EQ.0)GO TO 1299
23100 C*************** MAY 18,71 ***** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
23200 V(I)=-9900.-BY
23300 GO TO 8703
23400
23500 7703 V(IJ)=4.*ALL
23600 8703 I=I+1
23700 GO TO 4773
23800 C FOR SUBROUTINES, -12=NUMS. -11=LETTERS.
23900 6703 CODE=-12.
24000 IF(INP(ML+3).EQ.'L')CODE=-11.
24100 V(IJ)=2.*ALL
24200 V(IJ+1)=CODE+DF
24300 I=I-1
24400 GO TO 4773
24500 4018 CNT(LK)=-9900.-BY
24600 P(LK)=V(I-4)
24700 CC 6/74 COLGATE JREAD=3
24800 CC 6/74 COLGATE GO TO 4400
24900 1444 IF(READER(JNP))CALL RUNIT
25000 C READS A LINE. IF END OF FILE, JUMPS.
25100 CC443 IF(IFI)REREAD 107,K,IPT(LK,1)
25200 CC IF(IFI.GE.0)REREAD 8001,IPT(LK,1)
25300 443 IF(LN.NE.0)REREAD 107,K,IPT(LK,1)
25400 IF(LN.EQ.0)REREAD 8001,IPT(LK,1)
25500 C NAME OF RHYTHM FILE. (ONLY ONE PER INST.) READS DATA JUST BEFORE RUN
25600 IF(J.EQ.'CONDU')GO TO 444
25700 IF(NL.NE.ITT)GO TO 2338
25800 CODE=-23.
25900 GO TO 1016
26000 2338 I=I-4
26100 GO TO 4773
26200 3018 CNT(KZY)=-9900.
26300 LK=KZY
26400 C TO PUT 'CONDUCT' FILE NAME IN LAST SLOT (KZY) AT 443
26500 GO TO 1444
26600 444 P(KZY)=980000.
26700 GO TO 2308
26800 C CAN'T USE 'TAP' OR 'RTAP' WITH INST KZY IF USING 'CONDUCT'.
26900 C 'REP'
27000 2703 ML=ML+1
27100 VX1=0
27200 VX2=0
27300 VX3=0
27400 IF(N.EQ.IXX)GO TO 2704
27500 INP(ML)=IBLA
27600 INP(ML+1)=IBLA
27700 C WIPES OUT 'EP' IN 'REP'
27800 2704 CALL SCANR
27900 V(IJ)=3.
28000 V(IJ+1)=-66.0
28100 IF(VX1.EQ.32.)VX1=1.
28200 IF(VX1.EQ.0)VX1=LPAR
28300 IF(VX2.EQ.0)VX2=LK-1
28400 V(IJ+2)=VX1+VX2*10000.
28500 KL=VX2
28600 IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
28700 IF(VX3.EQ.0)GO TO 4773
28800 L=VX3
28900 ML=LK+1
29000 DO 1018 KL=ML,L
29100 IF(LPAR.LE.NP(KL))GO TO 997
29200 IF(LPAR.LT.31)NP(KL)=LPAR
29300 997 IF(DUR(KL))DUR(KL)=DUR(LK)
29400 C TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'
29500 V(I)=V(I-4)+10000.
29600 V(I+1)=3.
29700 V(I+2)=-66.
29800 V(I+3)=V(I-1)
29900 1018 I=I+4
30000 GO TO 4773
30100
30200 2018 IF(DF.EQ.0)GO TO 20181
30300 C NEXT FOR Pn SUBR/ I.E. NOTHING BUT P AND SUB CALL. 7/73
30400 V(IJ+1)=-201.
30500 V(IJ+2)=1.
30600 V(IJ+3)=0
30700 GO TO 7703
30800 20181 V(IJ)=3.
30900 V(IJ+1)=-66.
31000 V(IJ+2)=NW+LK*10000
31100 GO TO 4773
31200 C READS /P5 .3 "ABC" .7 "XYZ"/
31300
31400 8 V(IJ+1)=-77.+DF
31500 C DF HAS SUBR CALL INFO
31600 I=I+1
31700 VX(JJ-1)=1
31800 C FOR RAND. SINGLE LITS.
31900 DO 3722 K=1,JJ,2
32000 V(I)=VX(K)
32100 3722 I=I+1
32200 V(IJ+2)=JJ/2
32300 V(IJ+3)=I
32400 DO 4722 K=2,JJ,2
32500 KN=I
32600 I=I+1
32700 L=VX(K)
32800 DO 6722 KL=L,LEND
32900 IF(INP(KL).EQ.IQT)GO TO 4722
33000 IV(I)=INP(KL)
33100 6722 I=I+1
33200 4722 V(KN)=I-KN-1
33300 V(IJ)=(I-IJ)*ALL
33400 GO TO 4773
33500 2720 QTS=0
33600 2721 ISUB=104
33700 IF(NL.EQ.'A')ISUB=ISUB+1
33800 GO TO 1299
33900
34000 104 IF(ISUB.EQ.104)GO TO 1041
34100 C NEXT FOR INST NAME CHANGES. Pn NAMES/N;
34200 C V LIST= n000n/WDCNT/-89/NUM OF DUPLS/INST NAME/NUM OF LETTERS IN NAME/
34300 C *********** NO 'ALL' OR 'DUPL' FEATURES WITH NAMES **************
34400 V(IJ)=5
34500 V(IJ+1)=-89
34600 CALL SCANR
34700 V(I-1)=VX1
34800 IV(I)=INST(LK)
34900 CXX IV(I+1)=2**(1+(7-LETRS)*7)
35000 I=I+2
35100 GO TO 4773
35200 1041 KL=0
35300 DO 6721 K=ML,LEND
35400 L=INP(K)
35500 IF(L.EQ.IBLA)GO TO 6721
35600 JC=K+1
35700 IF(L.EQ.IQT)GO TO 7721
35800 IF(L.EQ.KSLA)GO TO 7232
35900 IF(L.EQ.ISEMI)GO TO 7232
36000 IF(L.NE.IF)GO TO 1040
36100 IF(INP(K+1).NE.'I')GO TO 1040
36200 IF(INP(K+2).NE.IEN)GO TO 1040
36300 IF(INP(K+3).NE.IE)GO TO 1040
36400 C FINDS THE WORD "FINE".
36500 V(I)=-10000.
36600 IF(DUR(LK))DUR(LK)=10000
36700 GO TO 1042
36800 1040 IF(L.EQ.'%')INP(K)=KSLA
36900 IF(L.EQ.'?')INP(K)=ISEMI
37000 IF(L.EQ.'!')INP(K)=','
37100 IF(L.EQ.'#')INP(K)='<'
37200 IF(L.EQ.'&')INP(K)='"'
37300 C THE ABOVE ARE ALL SPECIAL CHAR'S TO AVOID VARIOUS CONFUSIONS.
37400 IF(KL.EQ.0)KL=K
37500 6721 CONTINUE
37600 C FOR REPEAT OF ITEM BY SLASH
37700 C KL IS START OF QUOTE, THEN K IS END -- WHEN NO "S ARE USED.
37800 7232 IF(KL.EQ.0)GO TO 7233
37900 JC=KL
38000 ML=K+1
38100 JD=K-1
38200 NLIT=K-KL
38300 GO TO 8721
38400
38500 7233 DO 7230 KL=ILIT,ILIT+NLIT
38600 V(I)=V(KL)
38700 7230 I=I+1
38800 GO TO 27222
38900 7231 CONTINUE
39000
39100 5720 IAMP=-1
39200 JC=ML+1
39300 C FOR SINGLE 'LIT' ITEMS.
39400 7721 DO 1722 KL=JC+1,LEND
39500 IF(INP(KL).NE.IQT)GO TO 1722
39600 JD=KL-1
39700 ML=KL+1
39800 NLIT=KL-JC
39900 C EXTENT OF LIT ITEM IS FOUND
40000 GO TO 8721
40100 1722 CONTINUE
40200 C CAN'T USE SLASH FOR REPEAT AFTER @Q
40300 8721 V(I)=NLIT
40400 ILIT=I
40500 DO 9721 K=JC,JD
40600 C PUTS ITEM IN "IV" ARRAY
40700 I=I+1
40800 9721 IV(I)=INP(K)
40900 I=I+1
41000 27222 IF(IAMP.EQ.0)GO TO 1299
41100 2722 V(I)=999.
41200 1042 QTS=-1.
41300 X=-88.
41400 CNEW IF(ISUB.EQ.105)X=-89.
41500 C 105, -89. FOR LIST OF NAMES FOR INST. NAME CHNGS.
41600 27221 V(IJ+1)=X+DF
41700 V(IJ)=(I-IJ+1)*ALL
41800 IJ=IJ+2
41900 V(IJ)=IJ+1
42000 I=I+1
42100 ISUB=1
42200 GO TO 1299
42300
42400 7720 V(I)=LK
42500 V(I+1)=3.
42600 V(I+2)=-67.
42700 ML=ML+4
42800 CALL SCANR
42900 V(I+3)=VX1
43000 I=I+4
43100 L=VX1
43200 IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
43300 IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
43400 GO TO 4773
43500 C TYPE 'DUPL N;' N=INST # TO BE DUPLICATED.
43600 142 FORMAT(I,15A5)
43700 1301 FORMAT(15A5)
43800 1302 FORMAT(1X15A5)
43900 CCC2773 FORMAT(I,A5,72A1)
44000 2114 FORMAT(I,80A1)
44100 300 FORMAT(I,3F,A1)
44200 301 FORMAT(3F,A1)
44300 6 IF(J.NE.'PRECE')GO TO 1341
44400 C 'PRECEDE' WRITES LINES DIRECTLY ON DSK, BEFORE THE WORD 'PLAY;'.
44500 C NO LIMIT TO THE NUMBER OF LINES. LAST LINE (NOT PRINTED) MUST
44600 C BEGIN WITH *. KNP ARRAY (15) IS EQUIV. TO INP .
44700 4341 IF(ITYP)GO TO 5341
44800 TYPE TPALN
44900 ACCEPT 1301,KNP
45000 CALL SHORT(KNP,K)
45100 WRITE(21,1301)(KNP(JD),JD=1,K)
45200 GO TO 6341
45300 5341 IF(LN.EQ.0)GO TO 2341
45400 CC5341 IF(IFI.GE.0)GO TO 2341
45500 READ(23,142)K,KNP
45600 GO TO 3341
45700 2341 READ(23,1301)KNP
45800 3341 CALL SHORT(KNP,K)
45900 C DON'T TYPE TRAILING BLANKS
46000 IF(MX.NE.22)TYPE 1302,(KNP(JD),JD=1,K)
46100 6341 IF(MX.EQ.22)WRITE(JOUT,1302)(KNP(JD),JD=1,K)
46200 IF(INP1.EQ.'*')GO TO 2308
46300 IF(MX)WRITE(1,1301)(KNP(JD),JD=1,K)
46400 CC IF(MX)WRITE(23,1301)KNP
46500 GO TO 4341
46600 1341 KB=KB+1
46700 IF(JED.GT.0)JED=0
46800 IF(J.EQ.'INSER')GO TO 1340
46900 OTH(KB,1)=VX1*100000.+VX2*100.+VX3
47000 GO TO 340
47100 1340 X=VX1
47200 IF(VX2.NE.0)X=1000000.+VX1*100000.+VX2
47300 OTH(KB,1)=X
47400 GO TO 1338
47500 C ABOVE IS TO PUT INSERT AFTER NOTE # OF A PARTICULAR
47600 C INSTRUMENT. FOR COMMENT AT START, SET BG TIME TO 1,1
47700 C - BEGIN LINE WITH <,END WITH ;
47800 C UP TO 75 CHARACTERS MAY BE TYPED.
47900 340 IF(VX3.NE.2)GO TO 1338
48000 IF(ITYP.GE.0)GO TO 449
48100 CC JREAD=5
48200 CC 6/74 COLGATE GO TO 4400
48300 IF(READER(JNP))CALL RUNIT
48400 C READS A LINE. IF END OF FILE, JUMPS.
48500 445 OTH(KB,3)=1.
48600 CC IF(IFI.GE.0)GO TO 447
48700 IF(LN.EQ.0)GO TO 447
48800 REREAD 300,K,OTH(KB,2)
48900 GO TO 1447
49000 447 REREAD 301,OTH(KB,2)
49100 CIRC447 REREAD 301,OTH(KB,2)
49200 1447 IF(JED)GO TO 2308
49300 3445 TYPE TEDIT
49400 ACCEPT 77732,K
49500 IF(K.EQ.IG)JED=-1
49600 IF(J.EQ.'INSER')GO TO 3446
49700 IF(K.NE.'Y')GO TO 2308
49800 IF(JED)GO TO 2308
49900 449 TYPE TPALN
50000 ACCEPT 301,OTH(KB,2)
50100 IF(JED)WRITE(21,301) OTH(KB,2)
50200 GO TO 2308
50300
50400 1338 IF(ITYP.GE.0)GO TO 1449
50500 CC JREAD=6
50600 CC 6/74 COLGATE GO TO 4400
50700 IF(READER(JNP))CALL RUNIT
50800 C READS A LINE. IF END OF FILE, JUMPS.
50900 CC446 IF(IFI.GE.0)GO TO 448
51000 446 IF(LN.EQ.0)GO TO 448
51100 REREAD 142,K,(OTH(KB,JD),JD=2,16)
51200 GO TO 1446
51300 448 REREAD 1301,(OTH(KB,JD),JD=2,16)
51400 1446 IF(JED)2446,3445,2446
51500 3446 IF(K.NE.'Y')GO TO 2446
51600 IF(JED)GO TO 2446
51700 1449 TYPE TPALN
51800 ACCEPT 1301,(OTH(KB,JD),JD=2,16)
51900 IF(JED)WRITE(21,1301)(OTH(KB,JD),JD=2,16)
52000 2446 X=OTH(KB,2)
52100 IF(J.NE.'INSER')GO TO 971
52200 IF(VX3.EQ.0)GO TO 971
52300 IF(X.NE.'*')GO TO 6
52400 971 IF(X.EQ.'*')KB=KB-1
52500 C ALLOWS SEVERAL LINES OF 'INSERT' IF ANY 3RD #.
52600 C LAST LINE HAS '*' IN COLUMN 1.
52700 GO TO 2308
52800 C IF NO PARAM NUM IS GIVEN, ALL PARAMS MUST BE TYPED.
52900 C INSERT MAY INCLUDE 10 CHARS(P3-P30),
53000 C P2, A # ONLY. IF MORE THAN 1 PARAM IS TO BE EDITED AND
53100 C P2 IS ONE OF THEM, FIRST EDIT P2 TO DESIRED VALUE,
53200 C CHANGE P2 TO MINUS = THEN INSERT ENTIRE NOTE TO PLAY
53300 C JUST AFTER ORIGINAL NOTE(WHICH WILL BE A REST).
53400 C BX=INST N. Y=NOTE N. Z=PARAM N.
00100 1106 KTMP=1
00200 TP=60.
00300 IAMP=0
00400 BW=BY
00500 ITMP=-1
00600 ISUB=5
00700 JA=-1
00800 GO TO 2016
00900 3019 V(I)=990000.00
01000 V(I+1)=4.
01100 V(I+2)=VX1
01200 V(I+3)=VX2/TP
01300 V(I+4)=VX3/TP
01400 I=I+5
01500 BY=BW
01600 C SEPT 18, 70
01700 IF(VX1.EQ.0)GO TO 2308
01800 BW=BW+VX1
01900 V(I)=-9900.-BW
02000 I=I+1
02100 CALL BGSORT(BW)
02200 9003 IF(IAMP)GO TO 4003
02300 2016 VX3=0
02400 VX2=0
02500 GO TO 1299
02600 5 IF(VX2.NE.0)GO TO 105
02700 C 'TEMPO/120;' OR 'TEMPO/1.5 72;' IS OK.
02800 VX2=VX1
02900 VX1=0
03000 105 IF(VX3.EQ.0)VX3=VX2
03100 IF(VX2.LT.11.)TP=1.
03200 IF(J.EQ.ITMPO)GO TO 3019
03300 PCH(1,KTMP)=VX1
03400 PCH(2,KTMP)=VX2
03500 PCH(3,KTMP)=VX3
03600 C PCH(1)=TIME (2)=MM1 (3)=MM2
03700 KTMP=KTMP+1
03800 IF(IAMP.EQ.0)GO TO 2016
03900 4003 VX1=0
04000 IAMP=0
04100 VX2=VX3
04200 IF(J.EQ.ITMPO)GO TO 3019
04300 PCH(1,KTMP)=0
04400 PCH(2,KTMP)=VX2
04500 PCH(3,KTMP)=VX2
04600 C MM CAN BE FROM 11 UP TEMPO FACTOR FROM 10 DOWN.
04700 C UP TO 30 TEMPO CHANGES MAY BE MADE.
04800
04900 1016 IA=I
05000 IZ=1
05100 3100 V(I-2)=CODE+DF
05200 ISUB=3
05300 5016 IF(IAMP.GE.0)GO TO 1299
05400 117 IF(IZ-2)3013,9004,9004
05500 103 K=INP(ML)
05600 IF(K.EQ.ITT)GO TO 1106
05700 IF(K.EQ.KSLA)GO TO 1014
05800 IF(K.EQ.ISEMI)GO TO 1014
05900 CZZZZZZZZZZZZ CC ZZZZZZZZZZZZ
06000 IF(K.NE.IPP)GO TO 1010
06100 IF(JA.GE.0)GO TO 1899
06200 JA=-2
06300 GO TO 1011
06400 1010 IF(K.NE.IBLA) GO TO 1899
06500 1011 ML=ML+1
06600 GO TO 103
06700 3 IF(VX1.EQ.-99.)GO TO 4022
06800 IF(CODE.EQ.-22.)GO TO 2017
06900 IF(CODE.LT.-23)GO TO 17
07000 IF(IZ/2*2.EQ.IZ)GO TO 17
07100 C CHECKS PAIRS OF NUMBERS FOR 'RTAP'
07200 2017 IF(VX1.EQ.-10000.)GO TO 17
07300 CIRC2017 IF(VX1.EQ.10000.)GO TO 17
07400 VX1=4./VX1
07500 IF(JJ.NE.1)GO TO 2014
07600 V(I)=VX1
07700 GO TO 114
07800
07900 1217 IF(VX1.EQ.-10000.)GO TO 114
08000 CIRC1217 IF(VX1.EQ.10000.)GO TO 114
08100 C FOR "FINE" IN LIST
08200 V(I+1)=VX2
08300 IF(CODE.EQ.-36.)CALL RANR(V,I)
08400 2217 I=I+1
08500 C SETS UP STRING OF RAND SELECTIONS
08600 GO TO 114
08700 3217 V(I)=V(I-2)
08800 V(I+1)=RB
08900 C FOR SLASH REPTS OF RAND SELEC UNITS. ("REP" CAN'T BE USED!)
09000 GO TO 2217
09100 C******** PUT IN ERROR TRAP FOR "REP" ETC. ******
09200
09300 2014 DO 9006 L=2,JJ
09400 IF(VX(L).EQ.0)GO TO 17
09500 9006 VX1=4./VX(L)+VX1
09600 JJ=1
09700 17 IF(JA.NE.-2)GO TO 1012
09800 VX1=-9999.0-VX1/100.0
09900 JA=-1
10000 1012 IF(ICHD.EQ.0)GO TO 4014
10100 JJ=1
10200 C SETS UP NEXT NOTE AS CHORD (THIS ONE BECOMES NEG.)
10300 VX1=-VX1
10400 C FOR CHORD FEATURE
10500 ICHD=0
10600 4014 V(I)=VX1
10700 IF(CODE.EQ.-46.)GO TO 1217
10800 IF(CODE.EQ.-36.)GO TO 1217
10900 IF(CODE.NE.-35)GO TO 972
11000 IF(VX1.GT.15)CALL ERR(4)
11100 C FINDS F NUM.>15!
11200 C JUMP IF STRING OF RAND SELECS.
11300 972 IF(JJ.EQ.1)GO TO 114
11400 L=VX(JJ)-1
11500 X=V(I)
11600 NL=I+1
11700 I=L+I
11800 DO 1017 K=NL,I
11900 1017 V(K)=X
12000 C ADDS UP TOTAL OF NOTES IN SEQ.
12100 IZ=IZ+L
12200 GO TO 114
12300 1014 IF(CODE.EQ.-46.)GO TO 3217
12400 IF(CODE.EQ.-36.)GO TO 3217
12500 IF(CODE.NE.-33)GO TO 1103
12600 IF(V(I-2).GE.0)GO TO 1103
12700 C NEXT FOR SLASH REPEAT OF CHORD
12800 CCC I=I-1
12900 JC=1
13000 JD=1
13100 GO TO 2103
13200 1103 V(I)=RB
13300 C RB SAVES IT FOR SLASH REPEAT
13400 114 RB=V(I)
13500 I=I+1
13600 IZ=IZ+1
13700 GO TO 5016
13800 4022 JC=VX2+.3
13900 JD=VX3-.5
14000 IF(JJ.EQ.2)JD=1
14100 C********* MAY 19,71 ----MANY LINES ABOVE.
14200 2103 IZ=IZ+JC*JD
14300 C JD=HOW MANY TIMES, JC=HOW MANY NOTES
14400 IF(CODE.NE.-33)GO TO 3103
14500 8103 N=0
14600 V(IA-1)=0
14700 DO 4103 K=I-1,1,-1
14800 IF(V(K).GE.0)N=N+1
14900 4103 IF(N.EQ.JC)GO TO 5103
15000 5103 IF(V(K-1).GE.0)GO TO 6103
15100 IF(V(K).EQ.0)GO TO 6103
15200 K=K-1
15300 GO TO 5103
15400 6103 JC=I-K
15500 CC I=I+1
15600
15700 3103 DO 1005 K=1,JD
15800 NL=I+JC-1
15900 DO 2005 L=I,NL
16000 2005 V(L)=V(L-JC)
16100 1005 I=I+JC
16200 RB=V(NL)
16300 C RB SAVES DATA FOR SLASH REPEAT FEATURE.
16400 GO TO 5016
16500
16600 9004 IF(ITMP.EQ.0)GO TO 3013
16700 IZ=IZ-1
16800 C***** JAN. 1974
16900 KA=1
17000 IC=1
17100 K=0
17200 J=1
17300 Z=0
17400 RC=0
17500 9007 Y=PCH(3,IC)/TP
17600 X=PCH(2,IC)/TP
17700 Z=PCH(1,IC)
17800 CALL SQYY(YY,X,Y,Z)
17900 XT(1)=X
18000 PR=RA
18100 C75 RD=1
18200 C75 RB=0
18300 ZZ=Z
18400 CALL ACCEL
18500 IF(K.EQ.IZ)GO TO 3013
18600 IF(RA.NE.-10000.)GO TO 9007
18700 C********* MAY 13,71 OMITS REPEATED RHY. FEATURE.
18800 3013 X=I-IJ
18900 V(IJ+2)=X-3.
19000 V(IJ)=X*ALL
19100 IF(CODE.NE.-35)GO TO 4773
19200 M=IJ+3
19300 C SETS NUMBERS FOR FUNCS.
19400 DO 313 K=M,I-1
19500 313 IF(V(K).LT.85.)V(K)=V(K)+85.
19600 GO TO 4773
19700
19800 END